--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/mapview/clustered_marker_layer.py HEAD (8b8a5035) Text, 21.57 KB
Tff7b72import T7ee787time
Tff7b72import T7ee787RNS
Tff7b72from T7ee787math Tff7b72import Te6edf3atanTb4b4b4, Te6edf3expTb4b4b4, Te6edf3floorTb4b4b4, Te6edf3logTb4b4b4, Te6edf3piTb4b4b4, Te6edf3sinTb4b4b4, Te6edf3sqrt
Tff7b72from T7ee787osT7ee787.T7ee787path Tff7b72import Te6edf3dirnameTb4b4b4, Te6edf3join
Tff7b72from T7ee787kivyT7ee787.T7ee787lang Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3ListPropertyTb4b4b4, Te6edf3NumericPropertyTb4b4b4, Te6edf3ObjectPropertyTb4b4b4, Te6edf3StringPropertyTb4b4b4, Te6edf3BooleanProperty
Tff7b72from T7ee787mapviewT7ee787.T7ee787view Tff7b72import Te6edf3MapLayerTb4b4b4, Te6edf3MapMarkerTb4b4b4, Te6edf3CustomMapMarker
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDIconButton
Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(
T8b949e"""
ClusterMapMarker>:
size_hint: None, None
source: root.source
size: list(map(dp, self.texture_size))
allow_stretch: True
Label:
color: root.text_color
pos: root.pos
size: root.size
text: "{}".format(root.num_points)
font_size: dp(20)
TelemetryClusterMarker>:
size_hint: None, None
size: list(map(dp, self.texture_size))
allow_stretch: True
MDTelemetryIconButton:
id: tlm_icon_button
app: root.app
pos: [root.pos[0], root.pos[1]+dp(16)] if not root.small else [root.pos[0]+dp(7.5), root.pos[1]+dp(11)]
icon: root.icon
icon_color: root.icon_color
md_bg_color: root.md_bg_color
theme_icon_color: "Custom"
icon_size: dp(32) if not root.small else dp(22)
_default_icon_pad: dp(16) if not root.small else dp(11)
source_dest: root.source_dest
inspectable: root.inspectable
small: root.small
"""
Tb4b4b4)
T8b949e# Longitude/latitude to spherical mercator in [0..1] range
Tff7b72def Td2a8fflngXTb4b4b4(Te6edf3lngTb4b4b4)Tb4b4b4: Tff7b72return Te6edf3lng Tff7b72/ T79c0ff360.0 Tff7b72+ T79c0ff0.5
Tff7b72def Td2a8fflatYTb4b4b4(Te6edf3latTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3lat Tff7b72== T79c0ff90Tb4b4b4: Tff7b72return T79c0ff0
Tff7b72if Te6edf3lat Tff7b72== Tff7b72-T79c0ff90Tb4b4b4: Tff7b72return T79c0ff1
Te6edf3s Tff7b72= Te6edf3sinTb4b4b4(Te6edf3lat Tff7b72* Te6edf3pi Tff7b72/ T79c0ff180.0Tb4b4b4)
Te6edf3y Tff7b72= T79c0ff0.5 Tff7b72- T79c0ff0.25 Tff7b72* Te6edf3logTb4b4b4(Tb4b4b4(T79c0ff1 Tff7b72+ Te6edf3sTb4b4b4) Tff7b72/ Tb4b4b4(T79c0ff1 Tff7b72- Te6edf3sTb4b4b4)Tb4b4b4) Tff7b72/ Te6edf3pi
Tff7b72return Tffa657minTb4b4b4(T79c0ff1Tb4b4b4, Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4)
T8b949e# Spherical mercator to longitude/latitude
Tff7b72def Td2a8ffxLngTb4b4b4(Te6edf3xTb4b4b4)Tb4b4b4: Tff7b72return Tb4b4b4(Te6edf3x Tff7b72- T79c0ff0.5Tb4b4b4) Tff7b72* T79c0ff360
Tff7b72def Td2a8ffyLatTb4b4b4(Te6edf3yTb4b4b4)Tb4b4b4:
Te6edf3y2 Tff7b72= Tb4b4b4(T79c0ff180 Tff7b72- Te6edf3y Tff7b72* T79c0ff360Tb4b4b4) Tff7b72* Te6edf3pi Tff7b72/ T79c0ff180
Tff7b72return T79c0ff360 Tff7b72* Te6edf3atanTb4b4b4(Te6edf3expTb4b4b4(Te6edf3y2Tb4b4b4)Tb4b4b4) Tff7b72/ Te6edf3pi Tff7b72- T79c0ff90
Tff7b72class T56d364KDBushTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointsTb4b4b4, Te6edf3node_sizeTff7b72=T79c0ff64Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpoints Tff7b72= Te6edf3points
Tff7b72selfTff7b72.Td2a8ffnode_size Tff7b72= Te6edf3node_size
Tff7b72selfTff7b72.Td2a8ffids Tff7b72= Te6edf3ids Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Tffa657lenTb4b4b4(Te6edf3pointsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcoords Tff7b72= Te6edf3coords Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Tffa657lenTb4b4b4(Te6edf3pointsTb4b4b4) Tff7b72* T79c0ff2
Tff7b72for Te6edf3iTb4b4b4, Te6edf3point Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3pointsTb4b4b4)Tb4b4b4:
Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3i
Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3iTb4b4b4] Tff7b72= Te6edf3pointTff7b72.Td2a8ffx
Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3pointTff7b72.Td2a8ffy
Tff7b72selfTff7b72.Td2a8ff_sortTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72def Td2a8ffrangeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3min_xTb4b4b4, Te6edf3min_yTb4b4b4, Te6edf3max_xTb4b4b4, Te6edf3max_yTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rangeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidsTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcoordsTb4b4b4, Te6edf3min_xTb4b4b4, Te6edf3min_yTb4b4b4, Te6edf3max_xTb4b4b4, Te6edf3max_yTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_sizeTb4b4b4)
Tff7b72def Td2a8ffwithinTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3rTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_withinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidsTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcoordsTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3rTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_sizeTb4b4b4)
Tff7b72def Td2a8ff_sortTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3depthTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3right Tff7b72- Te6edf3left Tff7b72<Tff7b72= Te6edf3node_sizeTb4b4b4: Tff7b72return
Te6edf3m Tff7b72= Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3left Tff7b72+ Te6edf3rightTb4b4b4) Tff7b72/ T79c0ff2.0Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_selectTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3mTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3depth Tff7b72% T79c0ff2Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_sortTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3m Tff7b72- T79c0ff1Tb4b4b4, Te6edf3depth Tff7b72+ T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_sortTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4, Te6edf3rightTb4b4b4, Te6edf3depth Tff7b72+ T79c0ff1Tb4b4b4)
Tff7b72def Td2a8ff_selectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3kTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3incTb4b4b4)Tb4b4b4:
Te6edf3swap_item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_swap_item
Tff7b72while Te6edf3right Tff7b72> Te6edf3leftTb4b4b4:
Tff7b72if Tb4b4b4(Te6edf3right Tff7b72- Te6edf3leftTb4b4b4) Tff7b72> T79c0ff600Tb4b4b4:
Te6edf3n Tff7b72= Tffa657floatTb4b4b4(Te6edf3right Tff7b72- Te6edf3left Tff7b72+ T79c0ff1Tb4b4b4)
Te6edf3m Tff7b72= Te6edf3k Tff7b72- Te6edf3left Tff7b72+ T79c0ff1
Te6edf3z Tff7b72= Te6edf3logTb4b4b4(Te6edf3nTb4b4b4)
Te6edf3s Tff7b72= T79c0ff0.5 Tff7b72+ Te6edf3expTb4b4b4(T79c0ff2 Tff7b72* Te6edf3z Tff7b72/ T79c0ff3.0Tb4b4b4)
Te6edf3sd Tff7b72= T79c0ff0.5 Tff7b72* Te6edf3sqrtTb4b4b4(Te6edf3z Tff7b72* Te6edf3s Tff7b72* Tb4b4b4(Te6edf3n Tff7b72- Te6edf3sTb4b4b4) Tff7b72/ Te6edf3nTb4b4b4) Tff7b72* Tb4b4b4(Tff7b72-T79c0ff1 Tff7b72if Tb4b4b4(Te6edf3m Tff7b72- Te6edf3n Tff7b72/ T79c0ff2.0Tb4b4b4) Tff7b72< T79c0ff0 Tff7b72else T79c0ff1Tb4b4b4)
Te6edf3new_left Tff7b72= Tffa657maxTb4b4b4(Te6edf3leftTb4b4b4, Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Te6edf3k Tff7b72- Te6edf3m Tff7b72* Te6edf3s Tff7b72/ Te6edf3n Tff7b72+ Te6edf3sdTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3new_right Tff7b72= Tffa657minTb4b4b4(Te6edf3rightTb4b4b4, Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Te6edf3k Tff7b72+ Tb4b4b4(Te6edf3n Tff7b72- Te6edf3mTb4b4b4) Tff7b72* Te6edf3s Tff7b72/ Te6edf3n Tff7b72+ Te6edf3sdTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_selectTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3kTb4b4b4, Te6edf3new_leftTb4b4b4, Te6edf3new_rightTb4b4b4, Te6edf3incTb4b4b4)
Te6edf3t Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3k Tff7b72+ Te6edf3incTb4b4b4]
Te6edf3i Tff7b72= Te6edf3left
Te6edf3j Tff7b72= Te6edf3right
Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3kTb4b4b4)
Tff7b72if Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3right Tff7b72+ Te6edf3incTb4b4b4] Tff7b72> Te6edf3tTb4b4b4: Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4)
Tff7b72while Te6edf3i Tff7b72< Te6edf3jTb4b4b4:
Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)
Te6edf3i Tff7b72+Tff7b72= T79c0ff1
Te6edf3j Tff7b72-Tff7b72= T79c0ff1
Tff7b72while Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ Te6edf3incTb4b4b4] Tff7b72< Te6edf3tTb4b4b4: Te6edf3i Tff7b72+Tff7b72= T79c0ff1
Tff7b72while Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3j Tff7b72+ Te6edf3incTb4b4b4] Tff7b72> Te6edf3tTb4b4b4: Te6edf3j Tff7b72-Tff7b72= T79c0ff1
Tff7b72if Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3left Tff7b72+ Te6edf3incTb4b4b4] Tff7b72== Te6edf3tTb4b4b4: Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3jTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3j Tff7b72+Tff7b72= T79c0ff1
Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3jTb4b4b4, Te6edf3rightTb4b4b4)
Tff7b72if Te6edf3j Tff7b72<Tff7b72= Te6edf3kTb4b4b4: Te6edf3left Tff7b72= Te6edf3j Tff7b72+ T79c0ff1
Tff7b72if Te6edf3k Tff7b72<Tff7b72= Te6edf3jTb4b4b4: Te6edf3right Tff7b72= Te6edf3j Tff7b72- T79c0ff1
Tff7b72def Td2a8ff_swap_itemTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)Tb4b4b4:
Te6edf3swap Tff7b72= Tff7b72selfTff7b72.Td2a8ff_swap
Te6edf3swapTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)
Te6edf3swapTb4b4b4(Te6edf3coordsTb4b4b4, T79c0ff2 Tff7b72* Te6edf3iTb4b4b4, T79c0ff2 Tff7b72* Te6edf3jTb4b4b4)
Te6edf3swapTb4b4b4(Te6edf3coordsTb4b4b4, T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4, T79c0ff2 Tff7b72* Te6edf3j Tff7b72+ T79c0ff1Tb4b4b4)
Tff7b72def Td2a8ff_swapTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arrTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)Tb4b4b4:
Te6edf3tmp Tff7b72= Te6edf3arrTb4b4b4[Te6edf3iTb4b4b4]
Te6edf3arrTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3arrTb4b4b4[Te6edf3jTb4b4b4]
Te6edf3arrTb4b4b4[Te6edf3jTb4b4b4] Tff7b72= Te6edf3tmp
Tff7b72def Td2a8ff_rangeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3min_xTb4b4b4, Te6edf3min_yTb4b4b4, Te6edf3max_xTb4b4b4, Te6edf3max_yTb4b4b4, Te6edf3node_sizeTb4b4b4)Tb4b4b4:
Te6edf3stack Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4]
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3x Tff7b72= Te6edf3y Tff7b72= T79c0ff0
Tff7b72while Te6edf3stackTb4b4b4:
Te6edf3axis Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3right Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3left Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3right Tff7b72- Te6edf3left Tff7b72<Tff7b72= Te6edf3node_sizeTb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3leftTb4b4b4, Te6edf3right Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4:
Te6edf3x Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3iTb4b4b4]
Te6edf3y Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3x Tff7b72>Tff7b72= Te6edf3min_x Tff7b72and Te6edf3x Tff7b72<Tff7b72= Te6edf3max_x Tff7b72and Te6edf3y Tff7b72>Tff7b72= Te6edf3min_y Tff7b72and Te6edf3y Tff7b72<Tff7b72= Te6edf3max_yTb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)
Tff7b72continue
Te6edf3m Tff7b72= Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3left Tff7b72+ Te6edf3rightTb4b4b4) Tff7b72/ T79c0ff2.0Tb4b4b4)Tb4b4b4)
Te6edf3x Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3mTb4b4b4]
Te6edf3y Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3x Tff7b72>Tff7b72= Te6edf3min_x Tff7b72and Te6edf3x Tff7b72<Tff7b72= Te6edf3max_x Tff7b72and Te6edf3y Tff7b72>Tff7b72= Te6edf3min_y Tff7b72and Te6edf3y Tff7b72<Tff7b72= Te6edf3max_yTb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3mTb4b4b4]Tb4b4b4)
Te6edf3nextAxis Tff7b72= Tb4b4b4(Te6edf3axis Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% T79c0ff2
Tff7b72if Te6edf3min_x Tff7b72<Tff7b72= Te6edf3x Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Te6edf3min_y Tff7b72<Tff7b72= Te6edf3yTb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3leftTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72- T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)
Tff7b72if Te6edf3max_x Tff7b72>Tff7b72= Te6edf3x Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Te6edf3max_y Tff7b72>Tff7b72= Te6edf3yTb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3rightTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)
Tff7b72return Te6edf3result
Tff7b72def Td2a8ff_withinTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3qxTb4b4b4, Te6edf3qyTb4b4b4, Te6edf3rTb4b4b4, Te6edf3node_sizeTb4b4b4)Tb4b4b4:
Te6edf3sq_dist Tff7b72= Tff7b72selfTff7b72.Td2a8ff_sq_dist
Te6edf3stack Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4]
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3r2 Tff7b72= Te6edf3r Tff7b72* Te6edf3r
Tff7b72while Te6edf3stackTb4b4b4:
Te6edf3axis Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3right Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3left Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3right Tff7b72- Te6edf3left Tff7b72<Tff7b72= Te6edf3node_sizeTb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3leftTb4b4b4, Te6edf3right Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3sq_distTb4b4b4(Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3iTb4b4b4]Tb4b4b4, Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3qxTb4b4b4, Te6edf3qyTb4b4b4) Tff7b72<Tff7b72= Te6edf3r2Tb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)
Tff7b72continue
Te6edf3m Tff7b72= Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3left Tff7b72+ Te6edf3rightTb4b4b4) Tff7b72/ T79c0ff2.0Tb4b4b4)Tb4b4b4)
Te6edf3x Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3mTb4b4b4]
Te6edf3y Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3sq_distTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3qxTb4b4b4, Te6edf3qyTb4b4b4) Tff7b72<Tff7b72= Te6edf3r2Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3mTb4b4b4]Tb4b4b4)
Te6edf3nextAxis Tff7b72= Tb4b4b4(Te6edf3axis Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% T79c0ff2
Tff7b72if Tb4b4b4(Te6edf3qx Tff7b72- Te6edf3r Tff7b72<Tff7b72= Te6edf3xTb4b4b4) Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Tb4b4b4(Te6edf3qy Tff7b72- Te6edf3r Tff7b72<Tff7b72= Te6edf3yTb4b4b4)Tb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3leftTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72- T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3qx Tff7b72+ Te6edf3r Tff7b72>Tff7b72= Te6edf3xTb4b4b4) Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Tb4b4b4(Te6edf3qy Tff7b72+ Te6edf3r Tff7b72>Tff7b72= Te6edf3yTb4b4b4)Tb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3rightTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)
Tff7b72return Te6edf3result
Tff7b72def Td2a8ff_sq_distTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3axTb4b4b4, Te6edf3ayTb4b4b4, Te6edf3bxTb4b4b4, Te6edf3byTb4b4b4)Tb4b4b4:
Te6edf3dx Tff7b72= Te6edf3ax Tff7b72- Te6edf3bx
Te6edf3dy Tff7b72= Te6edf3ay Tff7b72- Te6edf3by
Tff7b72return Te6edf3dx Tff7b72* Te6edf3dx Tff7b72+ Te6edf3dy Tff7b72* Te6edf3dy
Tff7b72class T56d364ClusterTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3num_pointsTb4b4b4, Tffa657idTb4b4b4, Te6edf3propsTb4b4b4, Te6edf3extents Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffx Tff7b72= Te6edf3x
Tff7b72selfTff7b72.Td2a8ffy Tff7b72= Te6edf3y
Tff7b72selfTff7b72.Td2a8ffextents Tff7b72= Te6edf3extents
Tff7b72selfTff7b72.Td2a8ffnum_points Tff7b72= Te6edf3num_points
Tff7b72selfTff7b72.Td2a8ffzoom Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffid Tff7b72= Tffa657id
Tff7b72selfTff7b72.Td2a8ffprops Tff7b72= Te6edf3props
Tff7b72selfTff7b72.Td2a8ffparent_id Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Tff7b72None
T8b949e# Preprocess lon/lat
Tff7b72selfTff7b72.Td2a8fflon Tff7b72= Te6edf3xLngTb4b4b4(Te6edf3xTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflat Tff7b72= Te6edf3yLatTb4b4b4(Te6edf3yTb4b4b4)
Tff7b72class T56d364MarkerTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4, Tff7b72clsTff7b72=Te6edf3MapMarkerTb4b4b4, Te6edf3optionsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflon Tff7b72= Te6edf3lon
Tff7b72selfTff7b72.Td2a8fflat Tff7b72= Te6edf3lat
Tff7b72selfTff7b72.Td2a8ffcls Tff7b72= Tff7b72cls
Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Te6edf3options
T8b949e# Preprocess x/y from lon/lat
Tff7b72selfTff7b72.Td2a8ffx Tff7b72= Te6edf3lngXTb4b4b4(Te6edf3lonTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffy Tff7b72= Te6edf3latYTb4b4b4(Te6edf3latTb4b4b4)
T8b949e# Cluster information
Tff7b72selfTff7b72.Td2a8ffid Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffzoom Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffparent_id Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Tff7b72None
Tff7b72def Td2a8ffupdate_propsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffx Tff7b72= Te6edf3lngXTb4b4b4(Tff7b72selfTff7b72.Td2a8fflonTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffy Tff7b72= Te6edf3latYTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffwidgetTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8fflat Tff7b72= Tff7b72selfTff7b72.Td2a8fflat
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8fflon Tff7b72= Tff7b72selfTff7b72.Td2a8fflon
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8fficon Tff7b72= Tff7b72selfTff7b72.Td2a8fficon
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8fficon_color Tff7b72= Tff7b72selfTff7b72.Td2a8fficon_color
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8ffmd_bg_color Tff7b72= Tff7b72selfTff7b72.Td2a8ffmd_bg_color
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8fflocation_time Tff7b72= Tff7b72selfTff7b72.Td2a8fflocation_time
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8ffinspectable Tff7b72= Tff7b72selfTff7b72.Td2a8ffinspectable
Tff7b72selfTff7b72.Td2a8ffwidgetTff7b72.Td2a8ffsmall Tff7b72= Tff7b72selfTff7b72.Td2a8ffsmall
Tf0883e@property
Tff7b72def Td2a8ffappTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffappTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@appTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffappTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffappTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tf0883e@property
Tff7b72def Td2a8ffsource_destTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffsource_destTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@source_destTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffsource_destTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffsource_destTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tf0883e@property
Tff7b72def Td2a8fficonTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6fficonTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@iconTff7b72.Td2a8ffsetter
Tff7b72def Td2a8fficonTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6fficonTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tf0883e@property
Tff7b72def Td2a8fficon_colorTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6fficon_colorTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@icon_colorTff7b72.Td2a8ffsetter
Tff7b72def Td2a8fficon_colorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6fficon_colorTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tf0883e@property
Tff7b72def Td2a8ffmd_bg_colorTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffmd_bg_colorTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@md_bg_colorTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffmd_bg_colorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffmd_bg_colorTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tf0883e@property
Tff7b72def Td2a8fflocation_timeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6fflocation_timeTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@location_timeTff7b72.Td2a8ffsetter
Tff7b72def Td2a8fflocation_timeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6fflocation_timeTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tf0883e@property
Tff7b72def Td2a8ffinspectableTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffinspectableTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@inspectableTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffinspectableTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffinspectableTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tf0883e@property
Tff7b72def Td2a8ffsmallTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffsmallTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffoptionsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3kTb4b4b4, Tff7b72NoneTb4b4b4)
Tf0883e@smallTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffsmallTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vTb4b4b4)Tb4b4b4:
Te6edf3k Tff7b72= Ta5d6ff"Ta5d6ffsmallTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffoptionsTb4b4b4[Te6edf3kTb4b4b4] Tff7b72= Te6edf3v
Tff7b72def Tff7b72__repr__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ff<Tffd700{Tff7b72selfTff7b72.Td2a8ffclsTffd700}Ta5d6ff Proxy lat=Tffd700{Tff7b72selfTff7b72.Td2a8fflatTffd700}Ta5d6ff lon=Tffd700{Tff7b72selfTff7b72.Td2a8fflonTffd700}Ta5d6ff: Tffd700{Tff7b72selfTff7b72.Td2a8ffoptionsTffd700}Ta5d6ff>Ta5d6ff"
Tff7b72class T56d364SuperClusterTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3min_zoomTff7b72=T79c0ff0Tb4b4b4, Te6edf3max_zoomTff7b72=T79c0ff16Tb4b4b4, Te6edf3radiusTff7b72=T79c0ff40Tb4b4b4, Te6edf3extentTff7b72=T79c0ff512Tb4b4b4, Te6edf3node_sizeTff7b72=T79c0ff64Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmin_zoom Tff7b72= Te6edf3min_zoom
Tff7b72selfTff7b72.Td2a8ffmax_zoom Tff7b72= Te6edf3max_zoom
Tff7b72selfTff7b72.Td2a8ffradius Tff7b72= Te6edf3radius
Tff7b72selfTff7b72.Td2a8ffextent Tff7b72= Te6edf3extent
Tff7b72selfTff7b72.Td2a8ffnode_size Tff7b72= Te6edf3node_size
T8b949e# Load an array of markers. Once loaded, the index is immutable.
Tff7b72def Td2a8ffloadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftrees Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffpoints Tff7b72= Te6edf3points
Tff7b72for Te6edf3indexTb4b4b4, Te6edf3point Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3pointsTb4b4b4)Tb4b4b4: Te6edf3pointTff7b72.Td2a8ffid Tff7b72= Te6edf3index
Te6edf3clusters Tff7b72= Te6edf3points
Tff7b72for Te6edf3z Tff7b72in Tffa657rangeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmax_zoomTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmin_zoom Tff7b72- T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4:
T8b949e# start = time.time()
T8b949e# print(f"build tree for z={z}, clusters: {len(clusters)}")
Tff7b72selfTff7b72.Td2a8fftreesTb4b4b4[Te6edf3z Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3KDBushTb4b4b4(Te6edf3clustersTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_sizeTb4b4b4)
T8b949e# print("kdbush", (time.time() - start) * 1000)
T8b949e# start = time.time()
Te6edf3clusters Tff7b72= Tff7b72selfTff7b72.Td2a8ff_clusterTb4b4b4(Te6edf3clustersTb4b4b4, Te6edf3zTb4b4b4)
T8b949e# print(f"trees: {len(self.trees)}, clusters: {len(clusters)}")
T8b949e# print("clustering", (time.time() - start) * 1000)
Tff7b72selfTff7b72.Td2a8fftreesTb4b4b4[Tff7b72selfTff7b72.Td2a8ffmin_zoomTb4b4b4] Tff7b72= Te6edf3KDBushTb4b4b4(Te6edf3clustersTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_sizeTb4b4b4)
T8b949e# For the given bbox [westLng, southLat, eastLng, northLat], and
T8b949e# integer zoom, returns an array of clusters and markers
Tff7b72def Td2a8ffget_clustersTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3bboxTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Te6edf3tree Tff7b72= Tff7b72selfTff7b72.Td2a8fftreesTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_limit_zoomTb4b4b4(Te6edf3zoomTb4b4b4)Tb4b4b4]
Te6edf3ids Tff7b72= Te6edf3treeTff7b72.Td2a8ffrangeTb4b4b4(Te6edf3lngXTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3latYTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3lngXTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3latYTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3clusters Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3c Tff7b72= Te6edf3treeTff7b72.Td2a8ffpointsTb4b4b4[Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4]
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3cTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4: Te6edf3clustersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3cTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3clustersTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpointsTb4b4b4[Te6edf3cTff7b72.Td2a8ffidTb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3clusters
Tff7b72def Td2a8ff_limit_zoomTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zTb4b4b4)Tb4b4b4: Tff7b72return Tffa657maxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmin_zoomTb4b4b4, Tffa657minTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmax_zoom Tff7b72+ T79c0ff1Tb4b4b4, Te6edf3zTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_clusterTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointsTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Te6edf3clusters Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3c_append Tff7b72= Te6edf3clustersTff7b72.Td2a8ffappend
Te6edf3trees Tff7b72= Tff7b72selfTff7b72.Td2a8fftrees
Te6edf3r Tff7b72= Tff7b72selfTff7b72.Td2a8ffradius Tff7b72/ Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffextent Tff7b72* Tffa657powTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3pointsTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72= Te6edf3pointsTb4b4b4[Te6edf3iTb4b4b4]
T8b949e# If we've already visited the point at this zoom level, skip it
Tff7b72if Te6edf3pTff7b72.Td2a8ffzoom Tff7b72<Tff7b72= Te6edf3zoomTb4b4b4: Tff7b72continue
Te6edf3pTff7b72.Td2a8ffzoom Tff7b72= Te6edf3zoom
T8b949e# Find all nearby points
Te6edf3tree Tff7b72= Te6edf3treesTb4b4b4[Te6edf3zoom Tff7b72+ T79c0ff1Tb4b4b4]
Te6edf3neighbor_ids Tff7b72= Te6edf3treeTff7b72.Td2a8ffwithinTb4b4b4(Te6edf3pTff7b72.Td2a8ffxTb4b4b4, Te6edf3pTff7b72.Td2a8ffyTb4b4b4, Te6edf3rTb4b4b4)
Te6edf3num_points Tff7b72= T79c0ff1
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3pTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4: Te6edf3num_points Tff7b72= Te6edf3pTff7b72.Td2a8ffnum_points
Te6edf3wx Tff7b72= Te6edf3pTff7b72.Td2a8ffx Tff7b72* Te6edf3num_points
Te6edf3wy Tff7b72= Te6edf3pTff7b72.Td2a8ffy Tff7b72* Te6edf3num_points
Te6edf3props Tff7b72= Tff7b72None
Te6edf3lat_min Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3lat_max Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ff-infTa5d6ff"Tb4b4b4)
Te6edf3lon_min Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3lon_max Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ff-infTa5d6ff"Tb4b4b4)
T8b949e# Include seed point's extents/position in the calculation
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3pTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4:
Te6edf3lat_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_minTb4b4b4, Te6edf3pTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3lat_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lat_maxTb4b4b4, Te6edf3pTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3lon_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lon_minTb4b4b4, Te6edf3pTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3lon_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lon_maxTb4b4b4, Te6edf3pTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3lat_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_minTb4b4b4, Te6edf3pTff7b72.Td2a8fflatTb4b4b4)
Te6edf3lat_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lat_maxTb4b4b4, Te6edf3pTff7b72.Td2a8fflatTb4b4b4)
Te6edf3lon_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lon_minTb4b4b4, Te6edf3pTff7b72.Td2a8fflonTb4b4b4)
Te6edf3lon_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lon_maxTb4b4b4, Te6edf3pTff7b72.Td2a8fflonTb4b4b4)
Tff7b72for Te6edf3j Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3neighbor_idsTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3b Tff7b72= Te6edf3treeTff7b72.Td2a8ffpointsTb4b4b4[Te6edf3neighbor_idsTb4b4b4[Te6edf3jTb4b4b4]Tb4b4b4]
T8b949e# Filter out neighbors that are too far or already processed
Tff7b72if Te6edf3zoom Tff7b72< Te6edf3bTff7b72.Td2a8ffzoomTb4b4b4:
Te6edf3num_points2 Tff7b72= T79c0ff1
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3bTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4: Te6edf3num_points2 Tff7b72= Te6edf3bTff7b72.Td2a8ffnum_points
T8b949e# Save the zoom (so it doesn't get processed twice)
Te6edf3bTff7b72.Td2a8ffzoom Tff7b72= Te6edf3zoom
T8b949e# Accumulate coordinates for calculating weighted center
Te6edf3wx Tff7b72+Tff7b72= Te6edf3bTff7b72.Td2a8ffx Tff7b72* Te6edf3num_points2
Te6edf3wy Tff7b72+Tff7b72= Te6edf3bTff7b72.Td2a8ffy Tff7b72* Te6edf3num_points2
Te6edf3num_points Tff7b72+Tff7b72= Te6edf3num_points2
Te6edf3bTff7b72.Td2a8ffparent_id Tff7b72= Te6edf3i
T8b949e# Use extents for clusters, lat/lon for markers
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3bTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4:
Te6edf3lat_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_minTb4b4b4, Te6edf3bTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3lat_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lat_maxTb4b4b4, Te6edf3bTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3lon_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lon_minTb4b4b4, Te6edf3bTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3lon_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lon_maxTb4b4b4, Te6edf3bTff7b72.Td2a8ffextentsTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3lat_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_minTb4b4b4, Te6edf3bTff7b72.Td2a8fflatTb4b4b4)
Te6edf3lat_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lat_maxTb4b4b4, Te6edf3bTff7b72.Td2a8fflatTb4b4b4)
Te6edf3lon_min Tff7b72= Tffa657minTb4b4b4(Te6edf3lon_minTb4b4b4, Te6edf3bTff7b72.Td2a8fflonTb4b4b4)
Te6edf3lon_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3lon_maxTb4b4b4, Te6edf3bTff7b72.Td2a8fflonTb4b4b4)
Tff7b72if Te6edf3num_points Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3c Tff7b72= Te6edf3pointsTb4b4b4[Te6edf3iTb4b4b4]
Te6edf3pTff7b72.Td2a8ffextents Tff7b72= Tb4b4b4[Te6edf3lat_minTb4b4b4, Te6edf3lat_maxTb4b4b4, Te6edf3lon_minTb4b4b4, Te6edf3lon_maxTb4b4b4]
Te6edf3c_appendTb4b4b4(Te6edf3pTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3pTff7b72.Td2a8ffparent_id Tff7b72= Te6edf3i
Te6edf3extents Tff7b72= Tb4b4b4[Te6edf3lat_minTb4b4b4, Te6edf3lat_maxTb4b4b4, Te6edf3lon_minTb4b4b4, Te6edf3lon_maxTb4b4b4]
Te6edf3c_appendTb4b4b4(Te6edf3ClusterTb4b4b4(Te6edf3wx Tff7b72/ Te6edf3num_pointsTb4b4b4, Te6edf3wy Tff7b72/ Te6edf3num_pointsTb4b4b4, Te6edf3num_pointsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3propsTb4b4b4, Te6edf3extentsTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3clusters
Tff7b72class T56d364ClusterMapMarkerTb4b4b4(Te6edf3MapMarkerTb4b4b4)Tb4b4b4:
Te6edf3source Tff7b72= Te6edf3StringPropertyTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcluster_medium.pngTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3cluster Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
Te6edf3num_points Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tb4b4b4)
Te6edf3text_color Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4[T79c0ff0.9Tb4b4b4, T79c0ff0.9Tb4b4b4, T79c0ff0.9Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3extents Tff7b72= Te6edf3ListPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
Te6edf3delegate Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e# def on_touch_down(self, touch): return False
Tff7b72def Td2a8ffon_clusterTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3clusterTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffnum_points Tff7b72= Te6edf3clusterTff7b72.Td2a8ffnum_points
Tff7b72def Td2a8ffon_releaseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# RNS.log(f"{self} -> {self.delegate}: {self.num_points} / {self.extents}")
Te6edf3e Tff7b72= Tff7b72selfTff7b72.Td2a8ffextents
Tff7b72if Te6edf3eTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72< T79c0ff90 Tff7b72and Te6edf3eTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72> Tff7b72-T79c0ff90 Tff7b72and Te6edf3eTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72< T79c0ff180 Tff7b72and Te6edf3eTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72> Tff7b72-T79c0ff180Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72and Te6edf3eTb4b4b4: Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffshow_bboxTb4b4b4(Te6edf3eTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3eTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3eTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4, Te6edf3eTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)
Tff7b72class T56d364MDTelemetryIconButtonTb4b4b4(Te6edf3MDIconButtonTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffon_releaseTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinspectableTb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffmap_display_telemetryTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNo inspectable data for Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsource_destTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72class T56d364TelemetryClusterMarkerTb4b4b4(Te6edf3CustomMapMarkerTb4b4b4)Tb4b4b4:
Te6edf3source_dest Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
Te6edf3app Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
Te6edf3icon Tff7b72= Te6edf3StringPropertyTb4b4b4(Ta5d6ff"Ta5d6ffmarkerTa5d6ff"Tb4b4b4)
Te6edf3icon_color Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4[T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3md_bg_color Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4[T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3location_time Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3inspectable Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3small Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ffmd_bg_colorTa5d6ff" Tff7b72in Te6edf3kwargsTb4b4b4:
Te6edf3bg Tff7b72= Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6ffmd_bg_colorTa5d6ff"Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3bgTb4b4b4) Tff7b72>Tff7b72= T79c0ff3Tb4b4b4:
Te6edf3lim Tff7b72= T79c0ff0.5
Te6edf3lum Tff7b72= Tb4b4b4(Te6edf3bgTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72+Te6edf3bgTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72+Te6edf3bgTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tff7b72/T79c0ff3
Tff7b72if Te6edf3lum Tff7b72>Tff7b72= Te6edf3limTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsource Tff7b72= Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmarker_dark.pngTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsource Tff7b72= Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmarker_dark.pngTa5d6ff"Tb4b4b4)
Tffa657superTb4b4b4(Te6edf3TelemetryClusterMarkerTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsmallTb4b4b4: Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8fftlm_icon_buttonTff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4]
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8fftlm_icon_buttonTff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3dpTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fftexture_updateTb4b4b4(Tb4b4b4)
Tff7b72class T56d364ClusteredMarkerLayerTb4b4b4(Te6edf3MapLayerTb4b4b4)Tb4b4b4:
Te6edf3cluster_cls Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Te6edf3ClusterMapMarkerTb4b4b4)
Te6edf3cluster_min_zoom Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3cluster_max_zoom Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3cluster_radius Tff7b72= Te6edf3NumericPropertyTb4b4b4(Ta5d6ff"Ta5d6ff40dpTa5d6ff"Tb4b4b4)
Te6edf3cluster_extent Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff512Tb4b4b4)
Te6edf3cluster_node_size Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff64Tb4b4b4)
Te6edf3delegate Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffready Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffcluster Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcluster_markers Tff7b72= Tb4b4b4[Tb4b4b4]
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72def Td2a8ffadd_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4, Tff7b72clsTff7b72=Te6edf3MapMarkerTb4b4b4, Te6edf3optionsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3options Tff7b72is Tff7b72NoneTb4b4b4: Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3marker Tff7b72= Te6edf3MarkerTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4, Tff7b72clsTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcluster_markersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72return Te6edf3marker
Tff7b72def Td2a8ffremove_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcluster_markersTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72def Td2a8ffrebuildTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffRebuilding map clustersTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4) Tff7b72if Te6edf3RNSTff7b72.Td2a8ffslTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4) Tff7b72else Tff7b72None
Tff7b72for Te6edf3m Tff7b72in Tff7b72selfTff7b72.Td2a8ffcluster_markersTb4b4b4: Te6edf3mTff7b72.Td2a8ffzoom Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbuild_clusterTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffrepositionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rebuildTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffreadyTb4b4b4: Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcluster Tff7b72is Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ffbuild_clusterTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3rebuildTb4b4b4: Tff7b72selfTff7b72.Td2a8ffrebuildTb4b4b4(Tb4b4b4)
Te6edf3margin Tff7b72= Te6edf3dpTb4b4b4(T79c0ff48Tb4b4b4)
Te6edf3mapview Tff7b72= Tff7b72selfTff7b72.Td2a8ffparent
Te6edf3set_marker_position Tff7b72= Tff7b72selfTff7b72.Td2a8ffset_marker_position
Te6edf3bbox Tff7b72= Te6edf3mapviewTff7b72.Td2a8ffget_bboxTb4b4b4(Te6edf3marginTb4b4b4)
Te6edf3bbox Tff7b72= Tb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3bboxTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3bboxTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4, Te6edf3bboxTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclear_widgetsTb4b4b4(Tb4b4b4)
Te6edf3visible_points Tff7b72= Tff7b72selfTff7b72.Td2a8ffclusterTff7b72.Td2a8ffget_clustersTb4b4b4(Te6edf3bboxTb4b4b4, Te6edf3mapviewTff7b72.Td2a8ffzoomTb4b4b4)
Te6edf3visible_widgets Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3point Tff7b72in Te6edf3visible_pointsTb4b4b4:
Te6edf3widget Tff7b72= Te6edf3pointTff7b72.Td2a8ffwidget
Tff7b72if Te6edf3widget Tff7b72is Tff7b72NoneTb4b4b4: Te6edf3widget Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_widget_forTb4b4b4(Te6edf3pointTb4b4b4)
Te6edf3visible_widgetsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3pointTb4b4b4, Te6edf3widgetTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3mapviewTff7b72.Td2a8ff_zoom Tff7b72>Tff7b72= T79c0ff19Tb4b4b4:
Te6edf3scatter_markers Tff7b72= Tb4b4b4[Te6edf3p Tff7b72for Te6edf3pTb4b4b4, Te6edf3w Tff7b72in Te6edf3visible_widgets Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3pTb4b4b4, Te6edf3MarkerTb4b4b4)Tb4b4b4]
Tff7b72tryTb4b4b4: Te6edf3scatter_offsets Tff7b72= Te6edf3mapviewTff7b72.Td2a8ffscatter_markersTb4b4b4(Te6edf3scatter_markersTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError while getting scatter offsets: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Te6edf3scatter_offsets Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3pointTb4b4b4, Te6edf3widget Tff7b72in Te6edf3visible_widgetsTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3pointTb4b4b4, Te6edf3MarkerTb4b4b4)Tb4b4b4: Te6edf3widgetTff7b72.Td2a8ff_scatter_offset Tff7b72= Te6edf3scatter_offsetsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3pointTb4b4b4, Tb4b4b4(T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3widgetTff7b72.Td2a8ff_scatter_offset Tff7b72= Tb4b4b4(T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72for Te6edf3pointTb4b4b4, Te6edf3widget Tff7b72in Te6edf3visible_widgetsTb4b4b4: Te6edf3widgetTff7b72.Td2a8ff_scatter_offset Tff7b72= Tb4b4b4(T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4)
Tff7b72for Te6edf3pointTb4b4b4, Te6edf3widget Tff7b72in Te6edf3visible_widgetsTb4b4b4: Te6edf3set_marker_positionTb4b4b4(Te6edf3mapviewTb4b4b4, Te6edf3widgetTb4b4b4)
Tff7b72for Te6edf3pointTb4b4b4, Te6edf3widget Tff7b72in Tffa657sortedTb4b4b4(Te6edf3visible_widgetsTb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3pwTb4b4b4: Te6edf3pwTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffyTb4b4b4, Te6edf3reverseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
T8b949e# RNS.log(f"Clustering done in {RNS.prettyshorttime(time.time()-st)}", RNS.LOG_DEBUG) if RNS.sl(RNS.LOG_DEBUG) else None
Tff7b72def Td2a8ffbuild_clusterTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcluster Tff7b72= Te6edf3SuperClusterTb4b4b4(Te6edf3min_zoomTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_min_zoomTb4b4b4, Te6edf3max_zoomTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_max_zoomTb4b4b4,
Te6edf3radiusTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_radiusTb4b4b4, Te6edf3extentTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_extentTb4b4b4,
Te6edf3node_sizeTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_node_sizeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclusterTff7b72.Td2a8ffloadTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcluster_markersTb4b4b4)
Tff7b72def Td2a8ffcreate_widget_forTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3pointTb4b4b4, Te6edf3MarkerTb4b4b4)Tb4b4b4:
Te6edf3pointTff7b72.Td2a8ffwidget Tff7b72= Te6edf3pointTff7b72.Td2a8ffclsTb4b4b4(Te6edf3lonTff7b72=Te6edf3pointTff7b72.Td2a8fflonTb4b4b4, Te6edf3latTff7b72=Te6edf3pointTff7b72.Td2a8fflatTb4b4b4, Tff7b72*Tff7b72*Te6edf3pointTff7b72.Td2a8ffoptionsTb4b4b4)
Te6edf3pointTff7b72.Td2a8ffwidgetTff7b72.Td2a8ffextents Tff7b72= Tffa657getattrTb4b4b4(Te6edf3pointTb4b4b4, Ta5d6ff'Ta5d6ffextentsTa5d6ff'Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3pointTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4:
Te6edf3extents Tff7b72= Te6edf3pointTff7b72.Td2a8ffextents
Te6edf3pointTff7b72.Td2a8ffwidget Tff7b72= Tff7b72selfTff7b72.Td2a8ffcluster_clsTb4b4b4(Te6edf3lonTff7b72=Te6edf3pointTff7b72.Td2a8fflonTb4b4b4, Te6edf3latTff7b72=Te6edf3pointTff7b72.Td2a8fflatTb4b4b4, Te6edf3clusterTff7b72=Te6edf3pointTb4b4b4, Te6edf3extentsTff7b72=Te6edf3extentsTb4b4b4)
Te6edf3pointTff7b72.Td2a8ffwidgetTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegate
Tff7b72return Te6edf3pointTff7b72.Td2a8ffwidget
Tff7b72def Td2a8ffset_marker_positionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mapviewTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
Te6edf3xTb4b4b4, Te6edf3y Tff7b72= Te6edf3mapviewTff7b72.Td2a8ffget_window_xy_fromTb4b4b4(Te6edf3markerTff7b72.Td2a8fflatTb4b4b4, Te6edf3markerTff7b72.Td2a8fflonTb4b4b4, Te6edf3mapviewTff7b72.Td2a8ffzoomTb4b4b4)
Te6edf3offset Tff7b72= Tffa657getattrTb4b4b4(Te6edf3markerTb4b4b4, Ta5d6ff'Ta5d6ff_scatter_offsetTa5d6ff'Tb4b4b4, Tb4b4b4(T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4)Tb4b4b4)
Te6edf3x Tff7b72+Tff7b72= Te6edf3offsetTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3y Tff7b72+Tff7b72= Te6edf3offsetTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3markerTff7b72.Td2a8ffx Tff7b72= Te6edf3x Tff7b72- Te6edf3markerTff7b72.Td2a8ffwidth Tff7b72* Te6edf3markerTff7b72.Td2a8ffanchor_x
Te6edf3markerTff7b72.Td2a8ffy Tff7b72= Te6edf3y Tff7b72- Te6edf3markerTff7b72.Td2a8ffheight Tff7b72* Te6edf3markerTff7b72.Td2a8ffanchor_y
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────